home *** CD-ROM | disk | FTP | other *** search
- Copyright (c) 1992-1995 SAS Institute, Inc, Cary, NC
- All Rights Reserved.
-
- This document describes bug fixes and enhancements made in the 6.55
- release of the SAS/C Development System for AmigaDOS. To install
- the 6.55 patch, you must have version 6.50 or 6.51 of the SAS/C
- Development system installed.
-
- Note that not all executables and shared libraries have been
- modified. Those that have not been modified keep their old version
- number (6.50 or 6.51). This is normal.
-
- Since technical support has been terminated for the Amiga C product,
- the technical support avenues listed in your User's Guide are no
- longer valid. If you need help, post to the Internet newsgroup
- comp.sys.amiga.programmer. Knowledgeable SAS/C developers read
- that group and may be able to help you.
-
- Since the size of this archive is too big to fit on a standard floppy,
- a small script has been included for those who wish to copy this
- patch to floppies. To run this script, type:
-
- execute Create_Install_floppies
-
-
- ***************************** New Features ************************
-
- New development on the SAS/C system for AmigaDOS was terminated last
- summer, but between the release of Version 6.50 and the termination
- of development we did make some improvements to the system. We have
- included these improvements in the 6.55 patch.
-
- 1. SE will now optionally display a C file in multiple colors for the
- different token types. You can select the foreground, background,
- and style (bold, italic, underline or normal) for each of the
- following nine catagories: Plain Text, C Comments, C++ Comments,
- Double quoted strings, Single quoted strings, Numerical constants,
- Keywords, Identifiers, and Preprocessor Statements. There are two
- new menu items to control this in the Configuration Window.
-
- Colorize C Files - when set will cause all new files opened that
- end in .c* or .h to be colorized. Changing this will not effect
- any windows currently open in SE.
-
- Colorize C Prefs - will bring up another window and allow you to
- change the display attributes for any of the nine catagories.
-
- There is also a new key command that will toggle the colorization
- status of the current window. Its abbreviation is CC. You can
- bind it to any key that you like (enter CTRL-M, hit the key
- combination, and type "CC" in the box just above the tab settings).
-
- 2. A new profiler has been added that works like the SPROF profiler, but
- provides a graphical user interface to the profiling process. Its name
- is GUIPROF; full source code and instructions are provided in the
- SC:EXTRAS/GUIPROF directory. The GUIPROF executable is available in
- the SC:C directory.
-
- 3. Example code is provided in SC:EXAMPLES/AMIPROC that forks a subprocess
- with its own near data section. This will allow you to share code
- between processes but still use external data in each subprocess.
-
- 4. Example code is provided in SC:EXAMPLES/MOUNT that mounts and
- dismounts a file system node on the system list WITHOUT using the
- AmigaDOS Mount command. This will allow you to code a file system
- as a regular C program, invokable from command line or workbench.
- Since it's a regular process, it will be able to use printf() or
- other library I/O and be easily debuggable with CPR in any usual
- fashion.
-
- 5. Three new messages have been added to the C compiler: 188, 189,
- and 113.
-
- 188 is produced if you attempt to define functions or data in a
- header file while you are building a GST.
-
- 189 is produced if the GST you are using was built with different
- options than the current option set. 189 is produced sometimes as
- a warning and sometimes as an error; it is turned OFF by default.
- If, for example, you use MATH=68881 and the GST was built with
- MATH=STANDARD, you will get no message. Enable the warning with
- the STRICT or WARN=189 options to get a message for this case.
-
- 113 is produced if you use the "->" or "." operators incorrectly.
- It is similar to message 12, "invalid structure reference", except
- it gives more information about the operator involved and the type
- you tried to use the operator with.
-
- More information on these messages is available in the file
- sc:help/scmsg.guide .
-
- 6. Built-in preprocessor symbols (like _SHORTINT, _UNSCHAR, etc.)
- were not added to the GST in previous versions. In 6.55, they
- are added. This is how the compiler detects option conflicts
- as described above. If you depend on these built-in symbols
- for the various MATH= options, make sure you enable warning
- 189 so you don't end up with multiple definitions. For example,
- _M68881 and _IEEE could both end up defined for your code if
- you created a GST with MATH=68881 and used MATH=IEEE on your
- command line.
-
- 6. The built-in memcpy function can copy certain structures more
- efficiently now since the compiler retains more information on
- the alignment requirements of the structures. This also
- benefits structure assignment and call-by-value.
-
- ***************************** IMPORTANT ***************************
-
- 0. For users who never applied the 6.51 patch:
- The layout of bitfields was inadvertently changed between 6.0 and
- 6.50, which meant that structures containing bitfields were
- incompatible between the two versions. Bitfields now use
- the 6.0 method, with the exception of bitfields of size :0.
- :0 bitfields exhibited a bug in 6.0-6.3 and added extra unusable
- bytes to the structure. 6.55 bitfields do not add these extra
- bytes. Note that the bitfields in 6.51 and 6.55 are identical;
- this change only affects users upgrading from 6.50.
-
- 1. The __stack external variable sets the minimum stack size for
- your program, as documented in the Library Reference Manual and
- elsewhere. However, if you use it, you must set __stack to an
- even multiple of 4 bytes or risk having your machine crash.
-
- 2. Many users have inquired about the Quick Reference Guide for
- 6.50. There is no new Quick Reference Guide in 6.50; the 6.0
- guide is shipped to all new 6.50 customers, and customers who
- are upgrading should continue to use their old Quick Reference
- Guide.
-
- 3. Many users have asked about disk 6 in the installation process.
- Disk 6 is used only if you do the floppy installation; hard disk
- users do not need this disk.
-
- 4. The compiler now defines a preprocessor symbol __AMIGADATE__.
- This preprocessor symbol resolves to a datestamp string in the
- format required for the AmigaDOS VERSION command. The format is
- "(dd.mm.yy)", where dd is the day (1-31), mm is the month (1-12),
- and yy is the year. __AMIGADATE__ is available from both C
- and C++. Version 6.51 had some bugs in the __AMIGADATE__
- processing which have been fixed for this patch release.
-
- 5. The macros for some functions defined in the C header files are
- now not defined if compiling C++. They conflicted with the names
- of some member items of C++ classes in <iostream.h> or
- <complex.h>. Problem functions are <string.h>/index(),
- <math.h>/min(), max(), <fcntl.h>/open(), read(), write(),
- close(), <stdlib.h>/abs(). Many of these have alternate names
- using preceding underscores that can be used instead.
-
- 6. The priority of the autoinit functions for utility.library and
- the various Commodore math libraries were changed from 250
- to 100 in versions 6.51 and 6.55. This allows the autoinitializer
- for the SPROF and GUIPROF profilers to use utility.library if it
- is compiled with UTILLIB.
-
- 7. Several users have reported a problem using fopen() to open
- a "CON:" window. With the default AmigaShell, two windows will
- be opened. It was not possible to fix this problem in the library,
- because fopen() needs to do a Lock() to determine if the file exists
- prior to doing the Open(). However, Lock() will not be called if "r+"
- mode is used, and only one window will open. For example, the following
- will only open one window:
-
- fp = fopen("CON:", "r+");
-
- 8. The source file _tzset.c has been added to the sc:source directory.
- When compiled with no #defines, it will behave like the default
- __tzset function in the libraries. If compiled with LESS_GETENV=1,
- the getenv("TZ") will only be called once. This can be beneficial
- for programs that call time() frequently, ie BBS programs. Be sure to
- compile this file with the PARM=BOTH option.
-
- 9. If you have problems running CPR from the workbench, check to see if
- you are using a MagicWB icon for the 'Debug' icon. If so, you need to
- remove the '»»»» Icon by Martin Huttenloher ««««' ToolType from the
- icon. Use the Workbench "Icons/Information" menu option to remove this
- ToolType. CPR cannot work correctly with this ToolType in the icon.
-
- 10. The C++ translator has some problems dealing with error situations
- that arise after parse errors. This can sometimes result in
- many enforcer hits. We have found and fixed many of these problems,
- in many cases thanks to your error reports, but some problems no
- doubt remain. The root cause is a fundamental difference in the
- way the Amiga operating system or Enforcer handles illegal memory
- accesses from the way the C++ translator's original target
- platform handles it.
-
- If you get a string of enforcer hits from C++, there will almost
- always be at least one error message generated. Fix the first
- reported error and you will likely remove the Enforcer hits.
-
- ===============================
- Documentation/Help File Changes
- ===============================
-
- The Library Reference manual states for the forkl() routine that
- if the std_in field of the FORKENV structure is NULL, the current
- stdin will be used. This has been changed for 6.55 to an
- Open("*",...), so that a single program can call forkl several
- times.
-
- C++ error 1597 was not documented. It is now documented in the file
- sc:help/scmsg.guide.
-
- The Library Reference manual incorrectly showed the strstream
- constructor as having a default value of ios::out for the third
- formal parameter mode. Please cross out the "= ios::out" in the
- strstream constructor prototype described on page 684 of the Library
- Reference manual. This occurs in two places on page 684, once under
- the Synopsis section and once under the Constructors section. This
- has been corrected in the online sc_lib.guide file.
-
- The Library Reference manual descriptions of mkstemp() and mktemp()
- need to be changed on pages 349 and 351, respectively, to reflect
- the changes made in the header files. In both cases, the formal
- parameter, template should be be changed to template_arg. This has
- been corrected in the online sc_lib.guide file.
-
- ===============================
- List of Modified Files
- ===============================
-
- The following files were modified during the 6.55 patch installation.
-
- These files should be version 6.55.
-
- sc/c/sc
- sc/c/scopts
- sc/c/sc5
- sc/c/cpr
- sc/c/cprx
- sc/c/cprk
- sc/libs/sc1.library
- sc/libs/sc2.library
- sc/libs/scgo.library
- sc/libs/scgst.library
- sc/libs/scpeep.library
- sc/libs/schi.library
- sc/libs/sccxx.library
- sc/c/slink
- sc/c/asm
- sc/c/omd
- sc/c/oml
- sc/c/scmsg
- sc/c/se
- sc/c/smake
- sc/c/scsetup
- sc/c/splat
- sc/c/grep
- sc/c/mkmk
- sc/c/tb
- sc/c/scompact
- sc/libs/sekeymap.library
- sc/extras/mkmk/gensmake.c
- sc/extras/mkmk/mkmk.c
- sc/source/c.a
- sc/source/cback.a
- sc/source/libinit.c
- sc/source/ovs.a
- sc/source/constructor.h
- sc/include/stdlib.h
- sc/include/constructor.h
- sc/include/fcntl.h
- sc/include/mffp.h
- sc/include/stdio.h
- sc/include/dos.h
- sc/include/ios1.h
- sc/include/datatypes/datatypesclass.i
- sc/include/datatypes/datatypesclass.h
- sc/include/exec/exec_lib.i
- sc/include/sys/commhuge.h
- sc/include/sys/dir.h
- sc/include/workbench/workbench.i
- sc/include/workbench/workbench.h
-
- These files were not changed for version 6.55 but were changed in 6.51,
- and will have a version of 6.51.
-
- sc/c/mcc
- sc/c/mln
- sc/c/cctosc
- sc/c/lntoslink
- sc/source/_fpinit.c
- sc/source/_main.c
- sc/source/autoopenfail.c
- sc/source/_iob.c
- sc/include/assert.h
- sc/include/math.h
- sc/include/string.h
- sc/include/unistd.h
- sc/include/functions.h
- sc/include/cxxinclude/iostream.h
- sc/include/sys/commwben.h
-
- The remaining files will still have a version number of 6.50.
-
-
- ===============================
- Bug Fixes
- ===============================
-
- This is a partial list of bugs fixed in version 6.55. All repeatable code
- generation bugs, enforcer hits, and CXERRs have been fixed, with the
- exception of a couple in the sccxx.library that occur when it is given
- badly mangled input. These bug fixes are not listed individually here.
-
- Since the list of bugs is not complete, please try any cases that failed
- before. Your favorite bug may have been fixed anyway.
-
- -------------------------------------------------------------------------
-
- Yes, the __AMIGADATE__ macro is finally fixed. __AMIGADATE__ had two
- problems in 6.51 (both related to the same cause). First, the symbol
- had an extra '\0' at the end, so it didn't work in string concatenations;
- Second, the symbol trashed its own final double quote if the number
- for the current month was 10-12 and the day was 10-31.
-
- ---
-
- A very long-standing bug in GSTs was found and squashed. If you created
- a GST, then modified a header file, then deleted the .gst file from the
- disk but didn't flush the GST from memory, then attempted to rebuild the
- GST, the old GST remained in memory. No new GST was created. This has
- now been fixed.
-
- ---
-
- The compiler was failing to produce an error or warning if the user
- attempted to define __inline functions in a header file while building
- a GST. Error 188 was added.
-
- ---
-
- The compiler was failing to produce an error or warning if the user built
- a GST with one set of options, then built a C file using that GST but with
- a different set of options. Warning/Error 189 was added. This message
- reports conflicts between the MATH=, SHORTINT, and UNSCHAR options.
-
- ---
-
- The __FUNC__ built-in preprocessor symbol was being expanded to "" if
- PPONLY was used. It is now not expanded with PPONLY.
-
- ---
-
- The compiler did not produce warning 105, "no external symbols defined",
- if it encountered a prototype for an external function. It now does so.
-
- ---
-
- The compiler now suppresses warning 105 if the NOOBJNAME option is
- specified. This allows you to build a GST with NOOBJNAME and not get
- the warning.
-
- ---
-
- CPR left a lock on the current directory at exit.
-
- ---
-
- The compiler now ignores 0x0D characters at the end of a line,
- as long as they are not in a string constant. This allows you to port
- code for the IBM PC to the Amiga without stripping the CR-LF pair from
- the end of each line.
-
- ---
-
- SPROF hung the machine if you tried to run two programs compiled with
- PROFILE at the same time.
-
- ---
-
- The stat() family of functions did not do the correct time zone
- conversion. They now do.
-
- ---
-
- The autoinitializer for coverage analysis had the incorrect priority with
- earlier versions. The priority is now 210, which should allow you to
- cover your C++ constructurs and any C autoinitializers with default
- priority.
-
- ---
-
- An error message was added to detect the case of passing a pointer to a
- regargs function as a parameter to a function expecting a pointer to a
- stdargs function.
-
- ---
-
- The library function dfind() had a bug in which a dfind on the current
- directory would unlock CurDir().
-
- ---
-
- The prototype for opendir() in include:sys/dir.h was missing a 'const'
- keyword.
-
- ---
-
- Could not set __stdiowin if compiling with MATH=8 and DATA=FAR. The linker
- would give "Near reference to item not in near data section" errors.
-
- ---
-
- In fcntl.h, the #defines for open, close, read, and write were surrounded
- with #ifndef __cplusplus statements. This prevented a clash with the
- C++ iostreams library, which defines member functions of the same name.
- If you need to use the UNIX level 1 I/O functions from C++, use the
- double-underscore versions (__open, __close, __read, __write).
-
- ---
-
- tmpfile() would not allow more than 99 accesses during a single program
- run, whether you closed any previously opened files or not. It's supposed
- to allow 99 open files at one time.
-
- ---
-
- The SC driver had a limit of 32 command-line options. This limit has been
- removed. SC now accepts any number of command-line arguments.
-
- ---
-
- CPR had a limit of 1k on the path.
-
- ---
-
- The cross-debugger sometimes crashed when using pipes.
-
- ---
-
- CPR couldn't display far globals if they were merged into the near section
- by the linker. This was actually a linker bug, and has been fixed.
-
- ---
-
- ASM didn't warn for the invalid statement "add.b d5,a0", but instead
- generated incorrect code.
-
- ---
-
- CPR sometimes skipped the first statement in main() when first coming up.
- This happened if the main() had no prolog, so it only occurs for simple
- functions compiled with NOSTACKCHECK.
-
- ---
-
- ASM only put the base name of the file into the HUNK_NAME header. This
- could cause confusion when SLINK tries to produce an error message, since
- SLINK assumes ".c" for the extension.
-
- ---
-
- stat() could leave a lock on a file if CTRL-C is hit.
-
- ---
-
- forkl() attempted to pass pr_COS to multiple CreateNewProc()s, which
- apparently fails even if you tell CreateNewProc() not to close them.
- Fixed by passing Open("*", ...) for std_in.
-
- ---
-
- %p didn't work correctly in __builtin_printf with SHORTINT.
-
- ---
-
- If a C++ file with a static class member was compiled from SE via the F4
- key, and the LINK option was set, and that static member was never defined
- in the source, SE would not report the link error to the user. It would
- instead create an executable file that crashes when run.
-
- ---
-
- The compiler issued an incorrect error message for pointer addition
- performed on a void **. Example: void **x; x = x + 1;
-
- ---
-
- Strange character appeared in SE if you set tab expansion on, then typed
- {
- }
- }
-
- ---
-
- The value of HUGE_VAL was incorrect. It has been fixed.
-
- ---
-
- The %n argument to scanf didn't consider white space (tabs and spaces).
-
- ---
-
- When scopts' window was on a public screen, the amigaguide help window
- was opened on the WorkBench screen instead of the public screen.
-
- ---
-
- CPR didn't pass local ENV variables to the program being debugged.
- CPR now uses CreateNewProc() with AmigaDOS V2.0 and above.
-
- ---
-
- Warning 74, "Initializer data truncated", was produced incorrectly when
- the only thing truncated was the trailing null byte.
-
- ---
-
- The compiler could produce garbled error messages if a C file with invalid
- syntax that used a GST was compiled.
-
- ---
-
- ASM didn't accept '|' for the bitwise OR operation, as do many other
- assemblers. It now does.
-
- ---
-
- The compiler couldn't print the value of a "static const double" if the
- STRINGMERGE option was used.
-
- ---
-
- An empty macro caused ASM to give a "not enough memory" error.
-
- ---
-
- The OPTALIAS option was not working correctly.
-
- ---
-
- The "Undefined function called" requester was never produced for programs
- linked with SLINK in BATCH mode. The program just returned.
-
- ---
-
- The UNASSEMBLE command in CPR did not work, and did not return control to
- the user.
-
- ---
-
- SMFIND did not use full pathnames for files when executed from the Shell.
-
- ---
-
- When compiling with PROFILE, _PROLOG() and _EPILOG() calls were added to
- __interrupt functions. This is no longer done, since interrupt functions
- have no business calling the profiler anyway.
-
- ---
-
- strtod() failed if the first character of the string to be converted was
- a null byte.
-
- ---
-
- In the include file INCLUDE:mffp.h, the definition of the "ceil" macro
- has been changed from SPFCeil(f) to SPCeil(f).
-
- ---
-
- ALT-H to open an interlace screen in SE only opened an NTSC screen. It
- now opens NTSC or PAL as appropriate.
-
- ---
-
- ASM now accepts some 68040 and 68030 instructions that it previously did
- not accept.
-
- ---
-
- If SCOPTS failed in its first attempt to open its window, it scanned the
- system fonts list twice (not just once) looking for a replacement font.
- This was very slow on some machines.
-
- ---
-
- SCSETUP did not preserve the protection bits on files copied from
- SC:STARTER_PROJECT.
-
- ---
-
- The SET command in CPR was broken for floats.
-
- ---
-
- The MKMK utility crashed if run under OS 1.3 or earlier. It now issues an
- error message and quits.
-
- ---
-
- rawcon() now sends a message to the console task from the input file
- handler instead of the console task from the process structure.
- This allows it to work when input has been redirected to a console.
-
- ---
-
- The PRELINK option of SLINK could not be used with files containing calls
- to C++ constructors/destructors or C autoinit/autoterm functions. You
- would get multiply defined symbol errors from SLINK from ___ctors and
- ___dtors.
-
- ---
-
- printf() didn't handle "field.precision" properly for calls like
- printf("%5.d", 0);
-
- ---
-
- If ASM was invoked from SC, and CPU=68020 or CPU=68030 was specified, ASM
- was invoked with "-m2 -m3" instead of just one or the other.
-
- ---
-
- ASM gave a spurious warning "extraneous data on input line" if a comment
- followed the final END statement.
-
- ---
-
- ASM failed to add a trailing '/' to -i paths like the C compiler does.
-
- ---
-
- MKMK was putting the date and time it was compiled into the output
- smakefiles, rather than the date and time the smakefile was created.
- (Well, it worked when I tested it... right after compiling it.)
-
- ---
-
- The qsort() function could take up lots of stack in 6.51 and previous
- versions. The 6.55 version will always recurse on the smaller half of
- the list, therefore it does not take up nearly as much stack.
-
- ---
-
-